package bl.document;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import po.DocumentPo;
import po.Po;
import po.SystemLogPo;
import po.条目清单单项po;
import po.现金费用单po;
import vo.DocumentVo;
import vo.Vo;
import vo.条目清单单项vo;
import vo.CashExpensesDocumentVo;
import dbservice.document.DocumentDBService;
import dbservice.history.SystemLogDBService;

public  class CashExpensesDocumentBL extends DocumentBL{

	private static final long serialVersionUID = -1838013828866741901L;

	
/*	public static void main(String[] args){
		AccountBookPo ab=new AccountBookPo();
		ab.setName("accountbook");
		DocumentDBService db=new 现金费用单DB(ab);
		SystemLogDBService log=new SystemLogDB();
		try {
			现金费用单BL bl=new 现金费用单BL(db,log);
			
			
			List<条目清单单项vo> list_item=new ArrayList<条目清单单项vo>();
		    条目清单单项vo item1=new 条目清单单项vo("heixiu",2000,"无");
		    条目清单单项vo item2=new 条目清单单项vo("dajia",3000,"无");
		    list_item.add(item1);
		    list_item.add(item2);
		    现金费用单vo vo=new 现金费用单vo();
		    vo.setOperator("张鹏");
		    vo.set银行账户("7891011");
		    vo.set总额(5000);
		    vo.set条目清单(list_item);
		    //vo.set单据编号("XJFYD-20141206-00001");
		    //bl.add(vo);
			bl.redRush(vo);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	*/
	
	public CashExpensesDocumentBL(DocumentDBService documentDB,SystemLogDBService log)  throws RemoteException{
		super(documentDB,log);
		// TODO Auto-generated constructor stub
	}

	public CashExpensesDocumentVo _vo(现金费用单po po){
		   CashExpensesDocumentVo vo=new CashExpensesDocumentVo();
		   vo.set单据编号(po.get单据编号());
		   vo.setOperator(po.get操作员());
		   vo.set业务员(po.get业务员());
		   vo.set银行账户(po.get银行账户());
		   vo.set总额(po.get总额());;
		   List<条目清单单项vo> vo_list=new ArrayList<条目清单单项vo>();
		   List<条目清单单项po> po_list=po.get条目清单();
		   for(int i=0;i<po_list.size();i++){
			   vo_list.add(new 条目清单单项vo(po_list.get(i).get条目名(),po_list.get(i).get金额(),po_list.get(i).get备注()));
		   }
		   vo.set条目清单(vo_list);
		   return vo;
	   }
	   public 现金费用单po _po(CashExpensesDocumentVo vo){
		  现金费用单po po=new 现金费用单po();	
		  po.set单据编号(vo.get单据编号());
		  po.set操作员(vo.getOperator());
		  po.set银行账户(vo.get银行账户());
		  po.set总额(vo.get总额());
		  List<条目清单单项po> po_list=new ArrayList<条目清单单项po>();
		  List<条目清单单项vo> vo_list=vo.get条目清单();
		  for(int i=0;i<vo_list.size();i++){
			   po_list.add(new 条目清单单项po(vo_list.get(i).get条目名(),vo_list.get(i).get金额(),vo_list.get(i).get备注()));
		   }
		  po.set条目清单(po_list);
		  return po;
	   }
	   public DocumentPo _po(DocumentVo vo){
		   DocumentPo po=new DocumentPo();
		   po.set客户(vo.get客户());
		   po.setDate(vo.getDate());
		   po.set业务员(vo.get业务员());
		   po.setType(vo.isType());
		   po.set仓库(vo.get仓库());
		   return po;
	   }
		
		@Override
		public Vo approve(DocumentVo document) {
			Po po=documentDB.approve(_po((CashExpensesDocumentVo)document));
			Vo vo=new Vo();
			if(po.isSuccessed()){
				vo.successed();
				log.add(new SystemLogPo("总经理", "审批",((CashExpensesDocumentVo)document).get单据编号() ));
			}else{
				vo.failed(po.getFailMessage());
			}
			return vo;
		}

		@Override
		public Vo add(DocumentVo document) {
			Po po=documentDB.add(_po((CashExpensesDocumentVo) document));
			Vo vo=new Vo();
			if(po.isSuccessed()){
				vo.successed();
				log.add(new SystemLogPo(((CashExpensesDocumentVo)document).getOperator(), "添加", "现金费用单"));
			}
			else{
			    vo.failed(po.getFailMessage());
			}
			return vo;
		}

		@Override
		public Vo update(DocumentVo document) {
			Po po=documentDB.update(_po((CashExpensesDocumentVo) document));
			Vo vo=new Vo();
			if(po.isSuccessed()){
				vo.successed();
			}
			else{
			    vo.failed(po.getFailMessage());
			}
			return vo;
		}

		@Override
		public List<DocumentVo> get(DocumentVo from, DocumentVo to) {
			List<DocumentPo> po=documentDB.get(_po(from), _po(to));
			List<DocumentVo> vo=new ArrayList<DocumentVo> ();
			for(int i=0;i<po.size();i++){
				vo.add(_vo((现金费用单po) po.get(i)));
			}
			return vo;
		}

		@Override
		public List<DocumentVo> getUnapproval() {
			List<DocumentPo> po=documentDB.getUnapproval();
			List<DocumentVo> vo=new ArrayList<DocumentVo> ();
			for(int i=0;i<po.size();i++){
				vo.add(_vo((现金费用单po) po.get(i)));
			}
			return vo;
		}

		@Override
		public Vo redRush(DocumentVo vo) {
			Vo m=new Vo();
		    ((CashExpensesDocumentVo)vo).set总额(-((CashExpensesDocumentVo)vo).get总额());
		    List<条目清单单项vo> item=((CashExpensesDocumentVo)vo).get条目清单();
		    for(int i=0;i<item.size();i++){
		          item.get(i).set金额(-item.get(i).get金额());	
		    }
			// TODO Auto-generated method stub
		    Vo r=add(vo);
		    if(r.isSuccessed()){
		         m.successed();
		         log.add(new SystemLogPo(((CashExpensesDocumentVo)vo).getOperator(), "红冲",((CashExpensesDocumentVo)vo).get单据编号()));
		    }
		    else{
		    	m.failed(r.getFailMessage());
		    }
		    
			return m;
		}

	

}
